public class Solution160 {

    public static class ListNode {
      int val;
      ListNode next;
      ListNode(int x) {
          val = x;
          next = null;
      }
    }

    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode pA=headA;
        ListNode pB=headB;
        while (pA!=pB){
            pA=pA==null?headB:pA.next;
            pB=pB==null?headA:pB.next;
        }
        return pA;
    }

    public static void main(String[] args) {
        ListNode l8=new ListNode(8);
        ListNode l4=new ListNode(4);
        ListNode l5=new ListNode(5);
        l8.next=l4;
        l4.next=l5;
        ListNode headA=new ListNode(4);
        ListNode l11=new ListNode(1);
        headA.next=l11;
        l11.next=l8;
        ListNode headB=new ListNode(5);
        ListNode l6=new ListNode(6);
        ListNode l12=new ListNode(2);
        headB.next=l6;
        l6.next=l12;
        l12.next=l8;
        System.out.println(new Solution160().getIntersectionNode(headA,headB).val);
    }
}
